package com.vimhe.easyimport.util;

import java.lang.reflect.Array;
import java.util.Collection;
import java.util.Map;

/**
 * 字符串工具类
 *
 * @author Vimhe
 */
public class ValidateUtils {

    private ValidateUtils() {
    }

    /**
     * 是否存在一个或多个为空的对象.
     *
     * @param objects 要验证的对象列表
     * @return 是否存在一个或多个为空的对象
     */
    public static boolean isAnyEmpty(Object... objects) {
        for (Object o : objects) {
            if (isEmpty(o)) {
                return true;
            }
        }
        return false;
    }

    /**
     * 是否为空.
     *
     * @param obj 要验证的对象
     * @return 对象是否为空
     */
    public static boolean isEmpty(Object obj) {
        if (obj == null) {
            return true;
        }

        if (obj.getClass().isArray()) {
            return Array.getLength(obj) == 0;
        }
        if (obj instanceof CharSequence) {
            return ((CharSequence) obj).length() == 0;
        }
        if (obj instanceof Collection) {
            return ((Collection) obj).isEmpty();
        }
        if (obj instanceof Map) {
            return ((Map) obj).isEmpty();
        }

        return false;
    }

    /**
     * 是否所有的对象都为空.
     *
     * @param objects 要验证的对象列表
     * @return 是否所有的对象都为空
     */
    public static boolean isEveryEmpty(Object... objects) {
        for (Object o : objects) {
            if (!isEmpty(o)) {
                return false;
            }
        }
        return true;
    }

    /**
     * 是否存在一个或多个不为空的对象.
     *
     * @param objects 要验证的对象列表
     * @return 是否存在一个或多个不为空的对象
     */
    public static boolean isAnyNotEmpty(Object... objects) {
        for (Object o : objects) {
            if (isNotEmpty(o)) {
                return true;
            }
        }
        return false;
    }

    /**
     * 对象是否不为空.
     *
     * @param obj 要验证的对象
     * @return 对象是否不为空
     */
    public static boolean isNotEmpty(Object obj) {
        return !isEmpty(obj);
    }

    /**
     * 是否所有的对象都不为空.
     *
     * @param objects 要验证的对象列表
     * @return 是否所有的对象都不为空
     */
    public static boolean isEveryNotEmpty(Object... objects) {
        for (Object o : objects) {
            if (!isNotEmpty(o)) {
                return false;
            }
        }
        return true;
    }

}
